//
// Created by francklinson on 2021/6/16.
//

//峰值元素是指其值大于左右相邻值的元素。
//
//给你一个输入数组nums，找到峰值元素并返回其索引。数组可能包含多个峰值，在这种情况下，返回 任何一个峰值 所在位置即可。
//
//你可以假设nums[-1] = nums[n] = -∞ 。
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/find-peak-element
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    int findPeakElement(vector<int> &nums) {
        int lhs = 0, rhs = (int) nums.size() - 1;
        while (lhs < rhs) {
            int mid = lhs + (rhs - lhs) / 2;
            if (nums[mid] < nums[mid + 1]) lhs = mid + 1; // 题目明确不会有相等的  只考虑大 或者小
            else rhs = mid;
        }
        return lhs;
    }
};

int main() {
    vector<int> nums{1, 2, 1, 3, 5, 6, 4};
    Solution sol;
    cout << sol.findPeakElement(nums) << endl;
    return 0;
}